import { fileURLToPath, URL } from 'node:url'
import { defineConfig, loadEnv } from 'vite'
import vue from '@vitejs/plugin-vue'
import vueJsx from '@vitejs/plugin-vue-jsx'
import vueDevTools from 'vite-plugin-vue-devtools'

// https://vite.dev/config/
export default defineConfig(({ mode }) => { // 接收 mode 参数（当前环境）
  // 加载环境变量（在 vite.config.js 中必须使用 loadEnv）
  const env = loadEnv(mode, process.cwd(), 'VITE_')

  // 提取变量（从 env 对象中获取）
  const VITE_APP_BASE_API = env.VITE_APP_BASE_API || 'https://zhzylz.icu'
  // 建议把 env 中的 http 换成 ws（WebSocket 协议），无则用默认值
  const VITE_APP_SOCKET_URL = (env.VITE_APP_SOCKET_URL || 'https://socket.zhzylz.icu')
    .replace('http://', 'ws://') // 开发环境 http 转 ws
    .replace('https://', 'wss://') // 生产环境 https 转 wss

  return {
    base: mode === 'production' ? '/3ds/' : '/', // 简化：用 mode 判断环境（和 process.env.NODE_ENV 等价）
    build: {
      assetsDir: 'assets',
      rollupOptions: {
        output: {
          assetFileNames: 'assets/[name]-[hash].[ext]',
          chunkFileNames: 'assets/[name]-[hash].js',
        }
      },
      // 生产环境去除 console（使用 esbuild，无需额外安装依赖）
      minify: 'esbuild',
      esbuild: {
        drop: mode === 'production' ? ['console', 'debugger'] : []
      }
    },
    plugins: [
      vue(),
      vueJsx(),
      vueDevTools(),
    ],
    resolve: {
      alias: {
        '@': fileURLToPath(new URL('./src', import.meta.url))
      },
    },
    server: {
      proxy: {
        '/api': {
          target: VITE_APP_BASE_API,
          changeOrigin: true,
          secure: false,
          // 移除冗余的 rewrite（原规则无意义）
        },
        '/push': {
          target: VITE_APP_SOCKET_URL.replace('ws://', 'http://').replace('wss://', 'https://'), // /push 是 HTTP 接口，转回到 http/https
          changeOrigin: true,
          secure: false,
          // 移除冗余的 rewrite
        },
        '/socket.io': {
          target: 'http://socket.testsaas.top/', // 用转换后的 ws/wss 协议
          changeOrigin: true,
          ws: true, // 开启 WebSocket 代理（关键）
          secure: false
        }
      }
    }
  }
})